package com.tgy.MyFlowable.workflow.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ctsi.workflow.dto.FlwModelDTO;
import com.ctsi.workflow.dto.FlwModelInfoDTO;
import com.ctsi.workflow.vo.FlwModelVO;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.EndEvent;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 流程模型业务接口
 *
 * @version 1.0
 * @author: wang xiao xiang
 * @date: 2021/8/6 16:40
 */
public interface IFlwModelService {
    /**
     * 流程模型列表
     *
     * @param flwModelDTO 流程模型参数
     * @return 查询结果
     */
    Page<FlwModelVO> list(FlwModelDTO flwModelDTO);

    /**
     * 流程模型添加
     *
     * @param flwModelDTO 添加参数
     * @return 模型id
     */
    String add(FlwModelDTO flwModelDTO);

    /**
     * 流程模型删除
     *
     * @param ids id列表
     */
    void delete(String ids);

    /**
     * 流程模型编辑
     *
     * @param flwModelDTO 编辑参数
     * @return 模型id
     */
    String edit(FlwModelDTO flwModelDTO);

    /**
     * 流程模型导入
     *
     * @param file 导入的文件
     * @return 模型id
     */
    String importModel(MultipartFile file);

    /**
     * 流程模型预览
     *
     * @param flwModelDTO 预览参数
     * @return 模型xml
     */
    String preview(FlwModelDTO flwModelDTO);

    /**
     * 流程模型设为新版
     *
     * @param flwModelDTO 参数
     */
    void setNew(FlwModelDTO flwModelDTO);

    /**
     * 保存BPMN XML
     *
     * @param flwModelInfoDTO 模型信息请求对象
     * @return modelId
     */
    String saveBpmnModel(FlwModelInfoDTO flwModelInfoDTO);

    /**
     * 模型版本列表
     *
     * @param flwModelDTO 查询参数
     * @return 版本列表
     */
    Page<FlwModelVO> version(FlwModelDTO flwModelDTO);

    /**
     *
     * 获取结束节点
     * @param processDefId
     * @author mingyuan
     * @date 2021/9/23 10:58
     * @return java.util.List<org.flowable.bpmn.model.EndEvent>
     */
    List<EndEvent> findEndFlowElement(String processDefId);

    BpmnModel getBpmnModelByProcessDefId(String processDefId);
}
